Herokuアプリで使っていたmLab MongoDBをAtlasに移行した
https://gyazo.com/855fa7bcd394143d7ccef31e9313ac42
先日Herokuから「今アドオンとして提供してるmLabのmongodbは2020/11/10にディスコンして全てのHerokuアプリから削除されちゃうので、それまでに自分で削除するのがおすすめです」みたいなメールが来た。
MongoDB社がmLabを買収したことによって、mLabのMongoDBのサービスを終了してAtlasに一本化する影響らしい。
mLab is now part of MongoDB, Inc., the company behind the database that powers your application(s). For background please read our announcement on October 9, 2018.
メールの中ではObjectRocketとかいうのが代替として挙げられていますが、mLabの無料枠で事足りていた人間には関係ないので普通にAtlasに移行しましょう
事足りてなくてもAtlasに移行すべきな気がする、Addonだからってちょっとズレたのサジェストしてきてるでしょ
え〜めんどいな〜と思いつつまあどうせギリギリまで持ち越してやらんぐらいなら…と思って昨日今日で作業した。
勘所
公式のマイグレーション手段に従うと、最終的なマイグレーションの段階でmLabのユーザーの権限がRead onlyに書きかわり、数分書き込めなくなる
数分というのは多分データの保存してある量に合わせて伸びます
自分のアプリではMongoDBに対して常に書き込みと読み込みが発生し続けているので、念のため一時的にアプリのdynoを落とした
単体のMongoDBサーバではなくクラスタになる
え?
Primary, Replica, Replicaの三台構成になる
無駄に豪華
よって、接続URLがmongodb+srv://... になる
クラスタ用の接続URL
TypeORMでも普通に繋げる
繋ぎ方
TypeORM
手順の接続URLだと後ろにretryWrites=true&w=majorityがついてるけどこれをそのままコピペすると0.2.25では長すぎDB名判定されて接続できなかった
createConnectionに対してw: "majority"渡しつつ{extra: {retryWrites: true}}してやれば良いとは思うんですが、外しても多分問題ないと思う
責任は負わん
Robo 3T
From SRVに接続URLブッ込めば勝手にパースしてくれる
Set nameがOptionalとか書いてあるから消しても良いんかな?と思いがち
消すと繋がらん!
繋いだらよくわかんない感じになる
https://gyazo.com/75685527e245725c50e2d7470a2b9486
コレクション、どこ…?
https://gyazo.com/6873522329046b121c080081ca6586aa
伸ばして[P...を探す
Primaryのことです
[P...の列のノードをダブルクリック
db.getCollection("collectionName").操作内容
primary以外から操作するとこれはレプリカだよ〜んとエラー吐いて終わる
AtlasのWebUIからやった方が早い
さいごに
mLab今までありがとう